<?
// *****************************************************************************
// Объектно-ориентированный доступ к данным
// Префикс sharpobj_
// Автор: Алексей Дьяченко
// Библиотека распространяется по лицензии GPL
// Принять участие в разработке или скачать новую версию вы можете на сайте
// http://www.my-site.ru/
/*
	Copyright 2006-2007 Alex Djachenko http://www.my-site.ru
	Authors: Alex Djachenko
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
// *****************************************************************************

mst_initlib('simplecach');
// Загружаем настройки соединений с БД
include_once(mst_modpath($MT_mod_name,'cfg/dbconn.php'));

function &sharpobj_dbconn_new($dbtype,$conn_name)
{
	// Чтобы обойти невозможность вернуть false
	$false=false;
	// Соединяемся с базой данных и возвращаем соединение
	// Получаем массив с конфигурацией БД
	$dbconn_cfg = mst_getcfgmod('sharpobj','dbconn');
	// print_r($dbconn_cfg);
	// Устанавливаем соединение
    if (!isset($dbconn_cfg[$dbtype][$conn_name]))
    {
        return $false;
    }
	switch ($dbtype)
	{
		//
		case 'mysql':
			$new_conn = mysql_connect(
						$dbconn_cfg[$dbtype][$conn_name]['dbhostname'],
						$dbconn_cfg[$dbtype][$conn_name]['dbusername'],
						$dbconn_cfg[$dbtype][$conn_name]['dbpassword'])
				or mst_error('Невозможно соединиться с БД',
					"Невозможно соединиться с БД '{$dbconn_cfg[$dbtype][$conn_name]['dbhostname']}'",2);
			mysql_select_db(
					$dbconn_cfg[$dbtype][$conn_name]['dbname'],
					$new_conn) 
				or mst_error('Невозможно выбрать БД',
					"Невозможно выбрать БД '{$dbconn_cfg[$dbtype][$conn_name]['dbname']}'",2);
			// mysql_query('SET NAMES '.mst_getconfig('encoding'),$new_conn);
            if (isset($dbconn_cfg[$dbtype][$conn_name]['encoding'])
                AND $encoding = $dbconn_cfg[$dbtype][$conn_name]['encoding'])
            {
                mysql_query('SET CHARACTER SET '.$encoding,$new_conn);
                mysql_query('SET NAMES '.$encoding,$new_conn);
            }
		break;
		default:
			mst_error('Не поддерживаемый тип соединения',
				"Базы данных '{$dbtype}' не поддерживаются",2);
			return $false;
	}
	// Получаем массив ссылок на соединения
	$dbconn = mst_getdatemod('sharpobj','dbconn');
	// print_r($dbconn);
	// Сохраняем соединение
	$dbconn[$dbtype][$conn_name]=$new_conn;
	mst_setdatemod('sharpobj','dbconn',$dbconn);
	// echo $dbtype.$conn_name;
	return $new_conn;
}
function &sharpobj_dbconn_get($dbtype,$conn_name='default')
{
	// Возвращаем соединение с базой данных
	// Получаем массив ссылок на соединения
	$dbconn = mst_getdatemod('sharpobj','dbconn');
	if (isset($dbconn[$dbtype][$conn_name]))
	{
		return $dbconn[$dbtype][$conn_name];
	}else
	{
		return sharpobj_dbconn_new($dbtype,$conn_name);
	}

}
function sharpobj_iserror($dataobj)
{
	if ($dataobj instanceof sharpobj_data_item_error)
	{
		//
		return true;
	}else
	{
	    return false;
	}
}
function sharpobj_isanystring($dataobj)
{
	if ($dataobj instanceof sharpobj_data_item_email
	    OR $dataobj instanceof sharpobj_data_item_email
	    OR $dataobj instanceof sharpobj_data_item_html
	    OR $dataobj instanceof sharpobj_data_item_path
	    OR $dataobj instanceof sharpobj_data_item_phone
	    OR $dataobj instanceof sharpobj_data_item_row
	    OR $dataobj instanceof sharpobj_data_item_smallatword
	    OR $dataobj instanceof sharpobj_data_item_string
	    OR $dataobj instanceof sharpobj_data_item_text
	    OR $dataobj instanceof sharpobj_data_item_url)
	{
		//
		return true;
	}else
	{
	    return false;
	}
}
function sharpobj_error($code,$name,$about,$level = 1)
{
	$obj = new sharpobj_data_item_error;
	$obj->set('plain',$code,'code');
	$obj->set('plain',$name,'name');
	$obj->set('plain',$about,'about');
	mst_error('SharpObj error',"Сгенерирована ошибка ({$name})"
				." ({$code}) ({$about})",$level);
	return $obj;
}

function sharpobj_errorcode2text($code,$opt=null)
{
    switch($code)
    {
        case 'vartype':
            return 'Неправильный тип переменной';
		break;
        case 'format':
            return 'Неправильный формат';
		break;
        case 'len':
            if ($opt==='min')
            {
                return 'Строка короче заданного минимума';
            }elseif ($opt==='max')
            {
                return 'Строка длиннее заданного максимума';
            }else
            {
                return 'Неправильная длина строки';
            }
		break;
        case 'value':
            if ($opt === 'null')
            {
                return 'Поле должно содержать значение';
            }else
            {
                return 'Неправильное значение';
            }
		break;
        case 'unknown':
            return 'Неопознанная ошибка формата';
		break;		
        default:
            return $code;
        break;
    }
}

// Загружаем класс sharpobj_data
// Класс-контейнер хранения данных
include_once(mst_modpath($MT_mod_name,'libs/sharpobj_data.php'));
// Загружаем класс sharpobj_port_client
include_once(mst_modpath($MT_mod_name,'libs/sharpobj_port_client.php'));
// Загружаем класс sharpobj_port_server
include_once(mst_modpath($MT_mod_name,'libs/sharpobj_port_server.php'));
// Загружаем класс sharpobj_processor
include_once(mst_modpath($MT_mod_name,'libs/sharpobj_processor.php'));
// Загружаем класс sharpobj_storage
include_once(mst_modpath($MT_mod_name,'libs/sharpobj_storage.php'));
// Функции преобразования типов
include_once(mst_modpath($MT_mod_name,'libs/conv.php'));

?>
